package xfuzzy.xfghl.selection;

import java.util.List;
import java.util.Random;

import xfuzzy.xfghl.codification.DoubleChromosome;
import xfuzzy.xfghl.population.Population;

/**
 * Clase abstracta que realiza la seleccion de individuos para el cruce y la mutacion
 * @author Alberto David Fernandez Fernandez
 * */

public abstract class Selection {
	
	/**
	 * Variable para la generacion de numeros aleatorios
	 * */
	protected Random random;
	
	/**
	 * Constructor de la clase
	 * @param seed Semilla del generador de numeros aleatorios
	 * */
	
	public Selection(long seed)  {
		
		this.setRandom(new Random(seed));
	}

	public Random getRandom() {
		return random;
	}

	public void setRandom(Random random) {
		this.random = random;
	}
	
	/**
	 * Metodo que selecciona dos individuos de la poblacion
	 * @param poblacion Poblacion de individuos
	 * @return Lista de individuos seleccionados
	 * */

	public abstract List<DoubleChromosome> seleccionar(Population poblacion);
}
